<?php
define('TREEVIEW_LIB_PATH', APPLICATION_PATH .'/../lib/dbtreeview');

require_once(TREEVIEW_LIB_PATH . '/dbtreeview.php');

class myHandler implements RequestHandler{
    public function handleChildrenRequest(ChildrenRequest $req) {
        $attributes = $req->getAttributes();	
        if(!isset($attributes['MaDaiLy'])){
                die("error: attribute MaDaiLy not given");
        }
        $parentCode = $attributes['MaDaiLy'];

        $depth = 1;
        if(isset($attributes['depth'])){
                $depth = $attributes['depth'];
        }
        if($depth<1){
                die("depth error : must be > 0");
        }

        $link = mysql_connect("localhost", "tr0ngngh_sa", "th13nphuc.DB")
           or die("Unable to connect to database.");
        mysql_select_db("tr0ngngh_thienphucdb") or die("Could not select database");

        if(!mysql_query("SET CHARACTER SET utf8")){
                throw new Exception('Could not set character set UTF-8.');
        }

        $nodes = $this->getChildrenDepth($depth, 1, $parentCode);

        $response = DBTreeView::createChildrenResponse($nodes);
        return $response;


        // Close connect. 
        mysql_close($link);
    }
    
    /*     * return an array of children with subchidren... */
    private function getChildrenDepth($depth, $currentDepth, $parentCode) {

        $nodes = $this->getChildren($parentCode);

        if ($currentDepth < $depth) {
            foreach ($nodes as $node) {
                $childAttrs = $node->getAttributes();
                $childCode = $childAttrs["MaDaiLy"];
                if ($childCode == NULL) {
                    die("child MaDaiLy is null");
                }
                $children = $this->getChildrenDepth($depth, $currentDepth + 1, $childCode);
                if ($children == NULL) {
                    //die("null");
                }
                $node->setChildren($children);
                $node->setIsOpenByDefault(true);
            }
        }
        return $nodes;
    }

    /**
     * Returns the children (array)
     */
    private function getChildren($parentCode) {

        $query = sprintf("SELECT * FROM daily WHERE MaDaiLyCha='%s'", mysql_escape_string($parentCode));
        $result = mysql_query($query) or die("Query failed");
        $nodes = array();

        while ($line = mysql_fetch_assoc($result)) {
            $code = $line["MaDaiLy"];
            $text = "<b>$code</b> : " . $line["TenDaiLy"];

            $node = DBTreeView::createTreeNode($text, array("MaDaiLy" => $code));
            $node->setURL(sprintf("javascript:viewInfoDaily(%s);", $code));
            //has children
            $query2 = sprintf("SELECT * FROM daily WHERE MaDaiLyCha='%s' LIMIT 1", mysql_escape_string($code));

            $result2 = mysql_query($query2) or die("Query failed");
            if (!mysql_fetch_assoc($result2)) {
                //no children
                $node->setHasChildren(false);
                $node->setClosedIcon("../lib/dbtreeview/media/doc.gif");
            }
            $nodes[] = $node;
        }

        //ngắt kết nối.
        mysql_free_result($result);
        return $nodes;
    }

}

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of ThongKeKhachHangController
 *
 * @author Nghiatc
 */
class default_ThongkekhachhangController extends ZF_DefaultController{
    //put your code here
    public function indexAction() {
        $this->view->header = "Thống kê khách hàng";
        //treeview system ThienPhuc.
        try {
            DBTreeView::processRequest(new MyHandler());
        } catch (Exception $e) {
            echo("Error:" . $e->getMessage());
        }
        
        $model_trackdonhang = new Default_Model_Trackdonhang();
        $model_daily = new Default_Model_Daily();
        
        //get data tracking đơn hàng tháng hiện tại.
        $maDLCur = 7777777;
        if($this->getRequest()->getParam('code_daily')){
            $maDLCur = $this->getRequest()->getParam('code_daily');
        } else{
            $maDLCur = 7777777;
        }
        //lợi nhuận tổng cộng.
        $totalLN = 0;
        $totalBonus = 0;
        //get data table đơn hàng tự bán
        $tableDataDHTB = array();
        
        //get data đại lý hiện tại.
        $objDLCur = $model_daily->getById($maDLCur);
        $tenDLCur = $objDLCur['TenDaiLy'];
        $this->view->tenDLCur = $tenDLCur;
        
        //get data tracking đơn hàng tháng hiện tại.
        $matrackdh = $maDLCur."_".date("m")."_".date("Y");
        $data_trackdh = $model_trackdonhang->getById($matrackdh);
        $this->view->dataTDH = $data_trackdh;
        if($data_trackdh){
            //tạo row data.
            $rowtable = array(  'nameDLBan' =>$tenDLCur,
                                'loiNhuan'=>$data_trackdh['LoiNhuan'],
                                'bonus'=>$data_trackdh['Bonus']);
            // add table $tableDataDHTB
            $tableDataDHTB[] = $rowtable;
            $totalLN = $totalLN + $data_trackdh['LoiNhuan'];
            $totalBonus = $totalBonus + $data_trackdh['Bonus'];
        } else{
            //tạo row data.
            $rowtable = array(  'nameDLBan' =>$tenDLCur,
                                'loiNhuan'=>0,
                                'bonus'=>0);
            // add table $tableDataDHTB
            $tableDataDHTB[] = $rowtable;
        }
        
        $this->view->tableDataDHTB = $tableDataDHTB;
        
        //get data table đơn hàng đại lý cấp con.
        $tableDataDHCC = array();
        //get đệ quy danh sách các đại lý cấp con.
        //$DSDLCon = array();
        $DSDLCon = $this->getListDLCon($maDLCur);
        if($DSDLCon != NULL && count($DSDLCon) > 0){
            foreach ($DSDLCon as $value) {
                $maDLCon = $value['MaDaiLy'];
                //get data tracking đơn hàng tháng hiện tại.
                $matrackdhCon = $maDLCon."_".date("m")."_".date("Y");
                $data_trackdhCon = $model_trackdonhang->getById($matrackdhCon);
                //tạo row data.
                if($data_trackdhCon){
                    $rowtableCon = array(   'nameDLBan' =>$value['TenDaiLy'],
                                            'loiNhuan'=>$data_trackdhCon['LoiNhuan'],
                                            'bonus'=>$data_trackdhCon['Bonus']);
                    // add table $tableDataDHTB
                    $tableDataDHCC[] = $rowtableCon;
                    $totalLN = $totalLN + $data_trackdhCon['LoiNhuan'];
                    $totalBonus = $totalBonus + $data_trackdhCon['Bonus'];
                } else{
                    $rowtableCon = array(   'nameDLBan' =>$value['TenDaiLy'],
                                            'loiNhuan'=>0,
                                            'bonus'=>0);
                    // add table $tableDataDHTB
                    $tableDataDHCC[] = $rowtableCon;
                }
            }
        }
        
        $this->view->tableDataDHCC = $tableDataDHCC;
        $this->view->totalLN = $totalLN;
        $this->view->totalBonus = $totalBonus;
        
    }// End indexAction()
    
    public function getListDLCon($maDLCha){
        $listDLCon = array();
        if($maDLCha){
            $model_daily = new Default_Model_Daily();
            $maxLoop = 1000000;
            $arrQueue = array();
            $arrQueue[] = $maDLCha;
            $i = 0;
             while (count($arrQueue) > 0 && $i < $maxLoop){
                $dataTemp = $model_daily->getListAllDLCon($arrQueue[0]);
                if($dataTemp != NULL && count($dataTemp) > 0){
                    foreach ($dataTemp as $value) {
                        //nạp dữ liệu trả về.
                        $objDLCon = array(  'MaDaiLy' =>$value['MaDaiLy'],
                                            'TenDaiLy'=>$value['TenDaiLy']);
                        $listDLCon[] = $objDLCon;
                        //Thêm vào Queue.
                        $arrQueue[] = $value['MaDaiLy'];
                    }
                }
                
                //loại bỏ phần tử đầu mảng và tinh chỉnh chỉ mục mảng.
                unset($arrQueue[0]);
                $arrQueue = array_values($arrQueue);
                $i++;
            }
        }
        return $listDLCon;
    }


    public function getinfodailyAction() {
        
        $model_trackdonhang = new Default_Model_Trackdonhang();
        $model_daily = new Default_Model_Daily();
        
        //get data tracking đơn hàng tháng hiện tại.
        $maDLCur = $this->getRequest()->getParam('code_daily');
        if($maDLCur > 0){
            //get data đại lý hiện tại.
            //lợi nhuận tổng cộng.
            $totalLN = 0;
            $totalBonus = 0;
            //get data table đơn hàng tự bán
            $tableDataDHTB = array();
            
            //get data đại lý hiện tại.
            $objDLCur = $model_daily->getById($maDLCur);
            $tenDLCur = $objDLCur['TenDaiLy'];
            $this->view->tenDLCur = $tenDLCur;

            //get data tracking đơn hàng tháng hiện tại.
            $matrackdh = $maDLCur."_".date("m")."_".date("Y");
            $data_trackdh = $model_trackdonhang->getById($matrackdh);
            $this->view->dataTDH = $data_trackdh;
            if($data_trackdh){
                //tạo row data.
                $rowtable = array(  'nameDLBan' =>$tenDLCur,
                                    'loiNhuan'=>$data_trackdh['LoiNhuan'],
                                    'bonus'=>$data_trackdh['Bonus']);
                // add table $tableDataDHTB
                $tableDataDHTB[] = $rowtable;
                $totalLN = $totalLN + $data_trackdh['LoiNhuan'];
                $totalBonus = $totalBonus + $data_trackdh['Bonus'];
            } else{
                //tạo row data.
                $rowtable = array(  'nameDLBan' =>$tenDLCur,
                                    'loiNhuan'=>0,
                                    'bonus'=>0);
                // add table $tableDataDHTB
                $tableDataDHTB[] = $rowtable;
            }
            
            $this->view->tableDataDHTB = $tableDataDHTB;

            //get data table đơn hàng đại lý cấp con.
            $tableDataDHCC = array();
            //get đệ quy danh sách các đại lý cấp con.
            //$DSDLCon = array();
            $DSDLCon = $this->getListDLCon($maDLCur);
            if($DSDLCon != NULL && count($DSDLCon) > 0){
                foreach ($DSDLCon as $value) {
                    $maDLCon = $value['MaDaiLy'];
                    //get data tracking đơn hàng tháng hiện tại.
                    $matrackdhCon = $maDLCon."_".date("m")."_".date("Y");
                    $data_trackdhCon = $model_trackdonhang->getById($matrackdhCon);
                    //tạo row data.
                    if($data_trackdhCon){
                        $rowtableCon = array(   'nameDLBan' =>$value['TenDaiLy'],
                                                'loiNhuan'=>$data_trackdhCon['LoiNhuan'],
                                                'bonus'=>$data_trackdhCon['Bonus']);
                        // add table $tableDataDHTB
                        $tableDataDHCC[] = $rowtableCon;
                        $totalLN = $totalLN + $data_trackdhCon['LoiNhuan'];
                        $totalBonus = $totalBonus + $data_trackdhCon['Bonus'];
                    } else{
                        $rowtableCon = array(   'nameDLBan' =>$value['TenDaiLy'],
                                                'loiNhuan'=>0,
                                                'bonus'=>0);
                        // add table $tableDataDHTB
                        $tableDataDHCC[] = $rowtableCon;
                    }
                }
            }

            $this->view->tableDataDHCC = $tableDataDHCC;
            $this->view->totalLN = $totalLN;
            $this->view->totalBonus = $totalBonus;
            
            $jsonObject = array('ErrorCode' => '1',
                                'tenDL' => $tenDLCur,
                                'totalLN' => $totalLN,
                                'totalBonus' => $totalBonus,
                                'tableDHTB' => $tableDataDHTB,
                                'tableDHCC' => $tableDataDHCC
                                );
            $this->_helper->json->sendJson($jsonObject);
        } else{
            $jsonObject = array('ErrorCode' => '-1');
            $this->_helper->json->sendJson($jsonObject);
        }
        
    }
    
}

?>
